package com.weidft.biz.calc.cost;

import com.weidft.biz.calc.Param;
import com.weidft.biz.calc.constants.Cons;

public class HanJie extends ACost {

    public HanJie(Param param) {
        super(param);
    }

    public float getBasePrice() {
        return param.isTaiGang() ? 6.58f : 7.3f;
    }

    public String getName() {
        return Cons.HAN_JIE;
    }

    public float getCost() {
        return param.isCH() ? getCostCH() : getCostNotCH();
    }

    public String getFormual() {
        return param.isCH() ? getFormualCH() : getFormualNotCH();
    }

    public String getCalculateProcess() {
        return param.isCH() ? getCalculateProcessCH() : getCalculateProcessNotCH();
    }

    private float getCostCH() {
        float value = param.getLaiLiaoXiShu();
        value *= param.getCaiZhiXiShu();
        value *= param.getXingZhuangXiShu();
        value *= param.getHanJieXishu();
        value *= param.getBiHou();
        value *= param.getMuXiangChangDu();
        value *= param.getHanJieTiaoShu();
        value *= getBasePrice();
        return value;
    }

    private String getFormualCH() {
        StringBuffer sb = new StringBuffer();
        sb.append(getName()).append("=");
        sb.append(Cons.LAILIAO_XISHU).append(Cons.OP_CHEN);
        sb.append(Cons.CAIZHI_XISHU).append(Cons.OP_CHEN);
        sb.append(Cons.XINGZHUANG_XISHU).append(Cons.OP_CHEN);
        sb.append(Cons.HANJIE_XISHU).append(Cons.OP_CHEN);
        sb.append(Cons.HOU_DU).append(Cons.OP_CHEN);
        sb.append(Cons.MUXIANG_CHANG_DU).append(Cons.OP_CHEN);
        sb.append(Cons.HANJIE_TIAOSHU).append(Cons.OP_CHEN);
        sb.append(Cons.JICHU_DANJIA);
        return sb.toString();
    }

    private String getCalculateProcessCH() {
        StringBuffer sb = new StringBuffer();
        sb.append(param.getLaiLiaoXiShu()).append(Cons.OP_CHEN);
        sb.append(param.getCaiZhiXiShu()).append(Cons.OP_CHEN);
        sb.append(param.getXingZhuangXiShu()).append(Cons.OP_CHEN);
        sb.append(param.getHanJieXishu()).append(Cons.OP_CHEN);
        sb.append(param.getBiHou()).append(Cons.OP_CHEN);
        sb.append(param.getMuXiangChangDu()).append(Cons.OP_CHEN);
        sb.append(param.getHanJieTiaoShu()).append(Cons.OP_CHEN);
        sb.append(getBasePrice());
        return sb.toString();
    }

    private float getCostNotCH() {
        float value = param.getLaiLiaoXiShu();
        value *= param.getCaiZhiXiShu();
        value *= param.getXingZhuangXiShu();

        float xiaLiao = param.getXiaLiao();
        float a1 = xiaLiao / 2 * param.getXiaoPian1();
        float a2 = xiaLiao / 2 - param.getXiaoPian2();
        double b1 = Math.sqrt(xiaLiao * xiaLiao / 4 - a1 * a1);
        double b2 = Math.sqrt(xiaLiao * xiaLiao / 4 - a2 * a2);
        value *= (b1 + b2);
        value *= getBasePrice();
        value = value / 1000;
        value *= param.getBiHou();
        value *= param.getHanJieXishu();
        return value;
    }

    private String getFormualNotCH() {
        StringBuffer sb = new StringBuffer();
        sb.append(getName()).append("=");
        sb.append(Cons.LAILIAO_XISHU).append(Cons.OP_CHEN);
        sb.append(Cons.CAIZHI_XISHU).append(Cons.OP_CHEN);
        sb.append(Cons.XINGZHUANG_XISHU).append(Cons.OP_CHEN);

        sb.append("(");
        String xiaLiao = Cons.XIALIAO;
        String p1 = Cons.XIAO_PIAN1;
        String p2 = Cons.XIAO_PIAN2;
        // (Math.sqrt(xiaLiao * xiaLiao / 4 - (xiaLiao / 2 - p1)* (xiaLiao / 2 - p1)) + Math.sqrt(xiaLiao * xiaLiao / 4
        // - (xiaLiao / 2 - p2) * (xiaLiao / 2 - p2)));
        sb.append("(Math.sqrt(" + xiaLiao + "*" + xiaLiao + "/4-(" + xiaLiao + "/2-" + p1 + ")*(" + xiaLiao + "/2-"
                  + p1 + "))+Math.sqrt(" + xiaLiao + "*" + xiaLiao + "/4-(" + xiaLiao + "/2-" + p2 + ")*(" + xiaLiao
                  + "/2-" + p2 + ")))");
        sb.append(")").append(Cons.OP_CHU);
        sb.append(Cons.JICHU_DANJIA).append(Cons.OP_CHU).append(1000).append(Cons.OP_CHEN);
        sb.append(Cons.HOU_DU).append(Cons.OP_CHEN);
        sb.append(Cons.HANJIE_XISHU);
        return sb.toString();
    }

    private String getCalculateProcessNotCH() {
        StringBuffer sb = new StringBuffer();
        sb.append(getName()).append("=");
        sb.append(param.getLaiLiaoXiShu()).append(Cons.OP_CHEN);
        sb.append(param.getCaiZhiXiShu()).append(Cons.OP_CHEN);
        sb.append(param.getXingZhuangXiShu()).append(Cons.OP_CHEN);
        sb.append("(");
        float xiaLiao = param.getXiaLiao();
        float p1 = param.getXiaoPian1();
        float p2 = param.getXiaoPian2();
        // (Math.sqrt(xiaLiao * xiaLiao / 4 - (xiaLiao / 2 - p1)* (xiaLiao / 2 - p1)) + Math.sqrt(xiaLiao * xiaLiao / 4
        // - (xiaLiao / 2 - p2) * (xiaLiao / 2 - p2)));
        sb.append("(Math.sqrt(" + xiaLiao + "*" + xiaLiao + "/4-(" + xiaLiao + "/2-" + p1 + ")*(" + xiaLiao + "/2-"
                  + p1 + "))+Math.sqrt(" + xiaLiao + "*" + xiaLiao + "/4-(" + xiaLiao + "/2-" + p2 + ")*(" + xiaLiao
                  + "/2-" + p2 + ")))");
        sb.append(")").append(Cons.OP_CHU);
        sb.append(getBasePrice()).append(Cons.OP_CHU).append(1000).append(Cons.OP_CHEN);
        sb.append(param.getBiHou()).append(Cons.OP_CHEN);
        sb.append(param.getHanJieXishu());
        return sb.toString();
    }

}
